[c]下面程序的功能是将字符串s中所有的字符c删除。。。

来源:百度知道 编辑:UC知道 时间:2024/04/27 20:28:50
#include<stdio.h>
main()
{ char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if(s[i]!='c') 【 】
s[j]='\0';
puts(s);
}
A)s[j++]=s[i]
B)s[++j}=s[i]
C)s[j]=s[i];j++
D)s[j]=s[i]
答案是a,不明白题目再让我干什么。。。帮我解释一下 谢谢

楼上的错了,这个程序就是从指定字符串中删除特定字符,比如"abccef"处理后就成了"abef",其中i用来遍历整个字符串,j用来存储最靠前的'c'的位置。还是那个例子,"abccef",i直到等于2的时候也就是指向'b'的时候i和j都是一样的值,再来两个'c',j就停在那个'c'的位置,而i到了'e'的位置,然后s成了"abefef",最后'\0'加在j的位置,s成了"abef\0f",因为字符串以'\0'结束,所以输出"abef"
------------------------------
向pright道歉,确实是我看错了,其实我的意思和你的一样,但是我以为你想的是另外一种情况,下次我会再仔细些,再次表示歉意

s[j++]=s[i]
就是把除'c'以外的字符从字符串开头重新写入,然后再末尾加个'\0'结束标志,相当于把字符串内的'c'删除了
比如说:
s="abcdcabcd"
最终结果是s="abdabd\0cd"
输出的时候遇到'\0'认为字符串结束了,后面的字符不会输出
----------------------------------------------------------------------------------------------------------------------
楼上的还是自己想想清楚把,或者自己运行一下看看,不要这么贸然就说别人错了
把最后的puts(s)换成:
for (int k=0;k<80;++k)
{
printf("%c",s[k]);
}
然后看看结果,你就知道怎么回事了
to 利德:
没什么,彼此交